home *** CD-ROM | disk | FTP | other *** search
/ Mac Magazin/MacEasy 79 / maccd 79.iso / multimedial / GL Tron / Source / gltron / light.c < prev    next >
Encoding:
C/C++ Source or Header  |  2001-05-13  |  1.6 KB  |  96 lines  |  [TEXT/CWIE]

  1. #include "geom.h"
  2.  
  3. static float normal[4];
  4. static float eye[4];
  5. static float vertex[4];
  6. static float color[4];
  7. static float factor[4];
  8. static float light[4];
  9.  
  10. void setNormal3fv(float *f) {
  11.   normal[0] = f[0];
  12.   normal[1] = f[1];
  13.   normal[2] = f[2];
  14.   normal[3] = 1.0;
  15. }
  16.  
  17. void setEye3fv(float *f) {
  18.   eye[0] = f[0];
  19.   eye[1] = f[1];
  20.   eye[2] = f[2];
  21.   eye[3] = 1.0;
  22. }
  23.  
  24. void setVertex3f(float a, float b, float c) {
  25.   vertex[0] = a;
  26.   vertex[1] = b;
  27.   vertex[2] = c;
  28.   vertex[3] = 1.0;
  29. }
  30.  
  31. void setVertex3fv(float *f) {
  32.   vertex[0] = f[0];
  33.   vertex[1] = f[1];
  34.   vertex[2] = f[2];
  35.   vertex[3] = 1.0;
  36. }
  37.  
  38. void setLight3fv(float *f) {
  39.   light[0] = f[0];
  40.   light[1] = f[1];
  41.   light[2] = f[2];
  42.   light[3] = 1.0;
  43. }
  44.  
  45. void setLight4fv(float *f) {
  46.   light[0] = f[0];
  47.   light[1] = f[1];
  48.   light[2] = f[2];
  49.   light[3] = f[3];
  50. }
  51.  
  52. void setColor3fv(float *f) {
  53.   color[0] = f[0];
  54.   color[1] = f[1];
  55.   color[2] = f[2];
  56.   color[3] = 1.0;
  57. }
  58.  
  59. void setColor4fv(float *f) {
  60.   color[0] = f[0];
  61.   color[1] = f[1];
  62.   color[2] = f[2];
  63.   color[3] = f[3];
  64. }
  65.  
  66. void setFactor3fv(float *f) {
  67.   factor[0] = f[0];
  68.   factor[1] = f[1];
  69.   factor[2] = f[2];
  70.   factor[3] = 1.0;
  71. }
  72.  
  73. void light4fv(float *f) {
  74.   float cphi;
  75.   float tmp[4];
  76.  
  77.   vsub4(light, vertex, tmp);
  78.   cphi = scalarprod4(tmp, normal) / length4(tmp);
  79.   f[0] = color[0] + cphi * factor[0];
  80.   f[1] = color[1] + cphi * factor[1];
  81.   f[2] = color[2] + cphi * factor[2];
  82.   f[3] = color[3];
  83.   if(f[0] < 0) f[0] = 0;
  84.   else if(f[0] > 1) f[0] = 1;
  85.   if(f[1] < 0) f[1] = 0;
  86.   else if(f[1] > 1) f[1] = 1;
  87.   if(f[2] < 0) f[2] = 0;
  88.   else if(f[2] > 1) f[2] = 1;
  89.   /* printf("returning color %.2f %.2f %.2f\n", f[0], f[1], f[2]); */
  90. }
  91.  
  92.  
  93.  
  94.  
  95.  
  96.